#include <cstdlib> 
#include <iostream> 
#include <string>   

// 根据预处理器宏定义返回不同的问候语，这些宏由 CMake 设置
std::string say_hello() {
#ifdef IS_INTEL_CXX_COMPILER
  // 只有当使用 Intel C++ 编译器时才编译此分支
  return std::string("Hello Intel C++ compiler!");
#elif IS_GNU_CXX_COMPILER
  // 只有当使用 GNU C++ 编译器 (g++) 时才编译此分支
  return std::string("Hello GNU C++ compiler!");
#elif IS_PGI_CXX_COMPILER
  // 只有当使用 PGI C++ 编译器时才编译此分支
  return std::string("Hello PGI C++ compiler!");
#elif IS_XL_CXX_COMPILER
  // 只有当使用 XL C++ 编译器时才编译此分支 (通常在 IBM 平台上)
  return std::string("Hello XL C++ compiler!");
#else
  // 如果没有定义上述任何宏，则使用通用问候语
  return std::string("Hello unknown compiler - have we met before?");
#endif
}

int main() {
  // 调用 say_hello 函数并打印结果
  std::cout << say_hello() << std::endl;

  // 打印编译器的名称。COMPILER_NAME 宏将由 CMake 定义。
  // 注意：COMPILER_NAME 宏的值是一个字符串字面量，需要在 C++ 代码中正确使用。
  std::cout << "Compiler ID is " << COMPILER_NAME << std::endl;

  return EXIT_SUCCESS;
}